BREAKING CHANGE for 2020.1.13 - 2020.1.14
createTransformation and updateTransformation API status codes
Upon an upgrade from a 2020.1 maintenance release version before 2020.1.14 to 2020.2, the API status code response for the createTransformation
and updateTransformation
APIs will now be a 200 instead of a 201 status code upon a successfully created or updated transformation.
What should I do?
Check any custom application which calls the createTransformation
or updateTransformation
API to see if it uses the statusCode response. If it does, make sure any check for a "201" response instead looks for a "200" response.
BREAKING CHANGE for 2020.1.12 - 2020.1.13
Changes to the Pronghorn.getMethods permission for Custom Roles
In 2020.1.13, the GET /methods/registry
API is no longer included in the Pronghorn.getMethods
permission for custom roles. Access to the GET /methods/registry
API is now included under the Pronghorn.getMethodsRegistry
permission instead, and the Pronghorn.getMethods
permission solely includes the GET /methods
API.
What should I do?
If any custom role contains the Pronghorn.getMethods
permission and does not need access to the GET /methods
API, please add the new Pronghorn.getMethodsRegistry
permission to that role in Authorization Manager.
BREAKING CHANGE for 2020.1.11 - 2020.1.12
$where in Workflow Engine API Calls
Due to a vulnerability with Mongo, the $where
key is no longer supported as part of the query object for several API calls. The $where
key is specifically used in Mongo to support a JavaScript expression or function to be used as part of a query. Any APIs that were vulnerable to the usage of $where
will now return with an error if $where
is included in the query. The following APIs are affected by this, with the relevant parameter noted for each.
API | Parameter |
---|---|
POST /workflow_engine/getJobFromTaskQuery | task_query |
POST /workflow_engine/queryJobs | query |
POST /workflow_engine/jobs/find | query |
POST /workflow_engine/queryTasksBrief | query |
POST /workflow_engine/getTask | query |
BREAKING CHANGE for 2020.1.2 - 2020.1.9 -> 2020.1.10
Adapter Local AAA (adapter-local_aaa)
The following are breaking changes for the 2020.1.10 maintenance release.
API Removal
The table below shows a list of APIs that have been removed from the Local AAA adapter. This list represents all APIs removed in the 2020.1.10 maintenance release. Our deprecation process typically prevents breaking changes between maintenance releases. This is an exception as these specific calls were used for a unique scenario and never exposed to our customer base. Thus, we do not expect anyone is using them; however, in case they were accidentally discovered, we are mentioning them here with a directive to remove them.
What should I do?
Review any custom apps and adapters that might reference any APIs in the list below and remove them.
API Removed | Description | Deprecation Release | Actual Removal Release | Replacement |
---|---|---|---|---|
addUser | Exposed as a task to add a new user to Local AAA. | None | 2020.1.10 | None |
changePassword | Exposed as a task to update the password of a user. | None | 2020.1.10 | None |
getGroups | Exposed as a task to get all Local AAA Groups. | None | 2020.1.10 | None |
BREAKING CHANGE for 2019.3.0-2019.3.7 or 2020.1.2 -> 2020.1.3
The following are breaking changes for the 2020.1.3 release.
Migration of array.toString Tasks to objectToString
For workflows using the array.toString
task that was migrated or saved in a released version of IAP between 2019.3.0 and 2019.3.7 or between 2020.1.0 and 2020.1.2, the array.toString
task has now been migrated to objectToString
. Between IAP versions 2019.3.0 - 2019.3.7 and 2020.1.0 - 2020.1.2, the array.toString
task was changed to include two additional parameters and a slightly different output. Starting with IAP version 2019.3.8 and 2020.1.3, the functionality of array.toString
was reverted to the functionality that was prior to IAP version 2019.3.0. In other words, regarding the array.toString
task, there is no longer a breaking change from 2019.2 workflows to its 2019.3 or 2020.1 equivalents; however, in making this change, any workflows that intentionally used the new output of array.toString
will now be broken as a result of this change. Accordingly, the next section outlines how to find and fix this scenario.
Manual Steps for Migrated Workflows
For workflows where the array.toString
to objectToString
migration is breaking, a script is now provided to find workflows that contain a specific task (this task can be used to find any task as the need arises). Follow the steps below to find all workflows that contain objectToString
and manually update any that are breaking.
Download the following script:
Note: This script is also found on an installed version of 2020.1.3 in:
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Place the script in the following location (on the migrated environment that includes the 2020.1.3 maintenance release):
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Run the script to find all workflows that contain the
objectToString
task.cd /opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/ node findWorkflowTasks.js objectToString
If necessary, update any workflow tasks that are now breaking by replacing them with
array.ToString
.Update any tasks that reference the output of
array.ToString
that have not been updated already by setting the reference task dropdown tostringified
.Update any template variables that reference the previous
arrayString
output ofarray.ToString
to now referencestringified
. Remember to check any and all references that can occur subsequent to thearray.toString
task.
BREAKING CHANGE for 2020.1.1 -> 2020.1.2
RabbitMQ Properties Moved from Service Config to Profile
Upon upgrade to the 2020.1.2 maintenance bundle, the RabbitMQ properties will be automatically moved from all service configs to the profile. Additionally, these settings will be changed in the database; therefore all systems that share this database connection will be affected also. Please note, if you have a disaster recovery (DR) system in your setup, the changes made to the database will take effect once the first system is updated and affect all systems using that database. This basically means that all systems will need to be upgraded at the same time.
Rollback Instructions
Since the RabbitMQ properties will be auto-migrated from the service config to the profile, if a rollback is necessary, those properties must be restored manually to each relevant service config prior to upgrade.
BREAKING CHANGE for 2019.3.1/2019.3.2 -> 2020.1
The following are breaking changes for the 2020.1 release, specifically when updating from the first two maintenance releases of 2019.3 directly to 2020.1.
Important Note
It is the policy of Itential not to cause any breaking changes within the maintenance releases of a major release version; however, at times we have to do so and we extend our sincere apologies when those times occur. This situation occurred in maintenance release 2019.3.3.
Please note, Itential removed two features:
- Translations, and
- Multiple job variables on the "Outgoing" tab of automatic tasks.
The following procedure is only necessary if upgrading from 2019.3.1 or 2019.3.2 directly to release version 2020.1. If you have already performed these steps in an update from 2019.3.1/2019.3.2 -> 2019.3.3, then they are not needed when upgrading to 2020.1. There is no harm, however, in double-checking to be sure whether or not these steps may apply.
Removing the Translations Feature
For the 2019.3.0 IAP release, Itential deprecated all the global object methods (string, number, etc.) in Workflow Builder and replaced them with a 'translations' feature. Once that deprecation was made, Itential heard from many customers that the manual effort to replace all those methods would be a very large one with the toolset that is provided. With that level of effort in mind, and our commitment to provide customers with the best user experience possible, Itential decided to un-deprecate those methods in the 2019.3.3 maintenance patch.
Please note, the translations feature was removed, which means you cannot use translations in your new workflows on development servers. The global object methods will be available going forward beginning with IAP 2019.3.3.
Manual Steps to Ensure Database Integrity
Automations (within the Automation Studio) no longer allow tasks that export more than one job variable or that attach translations to exported job variables within automations. Workflow Engine will not support running automations with tasks that have translations on your outgoing data, or export more than one job variable as outgoing data. In the 2020.1 release, Workflow Engine will not start if it finds an automation that meets these conditions.
These automations need to be corrected manually. Use the following process:
Download the following two scripts:
Note: These scripts are also found on an installed version of 2020.1 in:
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Place the script files in the following location of a 2019.3.1 or 2019.3.2 system:
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Run the script to find automations that have incompatible tasks.
# cd /opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/ # node compatibilityCheck20193Maintenance.js
The output of the script will indicate which automations need to be corrected.
IMPORTANT: The correction must occur on a system running 2019.3.1 or 2019.3.2.
After all automations have been updated, run the script again to ensure they are compliant.
Once compliant, proceed with the update to 2020.1.
Sample Output
# cd /opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/`
# node compatibilityCheck20193Maintenance.js
incompatibleWorkflow contains incompatible tasks:
getAdaptersForDevice (508a)
Task Summary: exports more than one job variable
Reason: Task exports more than one job variable, each of which may or may not have translations attached to it.
locateDevices (e7c)
Task Summary: exports a job variable with a translation
Reason: Task exports a job variable with a translation attached to it.
locateDevices (37ec)
Task Summary: exports more than one job variable with translations
Reason: Task exports more than one job variable, each of which may or may not have translations attached to it.
RunCommand (2aed)
Task Summary: exports more than one job var with no translations
Reason: Task exports more than one job variable, each of which may or may not have translations attached to it.
Note: For ease of reference, the script output provides the name of the automation (e.g.
incompatibleWorkflow
) and the taskname (e.g.getAdaptersForDevice
andlocateDevices
),
This compatibility check script inspects all automations in your IAP deployment and will deem an automation incompatible if it contains any tasks that:
Export more than one job variable (each of which may or may not have a translation).
Export a job variable with a translation.
Modify the Automation to Fix Incompatibility
To fix the first case, modify the automation so that tasks exporting more than one job variable now:
Only export a single job variable without any translations.
Use the
newVariable
task to instantiate the number of job variables that the incompatible task created.Use the appropriate tasks from
Number
,Object
,String
, andArray
to perform data manipulation on created job variables (if necessary).
Modify the Task to Fix Incompatibility
To fix the second case, the task on an incompatible automation should be modified such that:
It still exports a single job variable via its outgoing data.
All translations are removed.
The appropriate tasks from
Number
,Object
,String
, andArray
are used to modify the exported job variable the same way that the translation did.
As stated above, once all workflows have been cleared of any tasks that either have multiple job variables defined or have a translation, the update to 2019.3.3 is cleared to proceed.
BREAKING CHANGE for 2019.3.2 and below -> 2020.1
Job Manager Database Enhancement
The following procedure is only necessary if upgrading from 2019.3.2 or lower directly to release version 2020.1. If you have already performed these steps in an update to 2019.3.3 or higher, then this procedure is not needed when upgrading to 2020.1. There is no harm, however, in double-checking to be sure whether or not these steps may apply.
As part of an ongoing effort to always provide the best performance within IAP, this release contains a migration script which will optimize the jobs data to allow faster queries against the collection. There are two possible methods to run this migration:
Ensure you have a full Mongo backup of your database before following this procedure.
npm run normalizeGroups
from theapp-workflow_engine
directory. The script will modify each job within the database, so depending on the number of jobs it may take 5 - 15 mins to complete. This is the slowest method because it is run from the IAP server and is only recommended for instances where the jobs collection is moderately sized (low 10Ks number of records).Download the normalizeGroups.js script and run it on the Mongo server via the command line. For example:
mongo mongodb://HOSTS:PORT/DATABASE?replicaSet=rs_pronghorn --authenticationDatabase admin -u USER -p PASS < normalizeGroups.js
. Tailor the MongoDB URI to your environment. This method is much faster and is recommended for large jobs collections.
These changes should not have any impact on your usage of Job/Task history.
Note: With this breaking change, it is very important that you ensure all indexes are setup correctly on Jobs and Tasks. This can be done by running the
npm run index
command from withinapp-workflow_engine
. If you are missing indexes, it may take 15-30 mins to complete the index creation on large databases.
BREAKING CHANGES for 2019.3.* -> 2020.1
Policy Manager (app-policy_manager)
With the addition of network groups and service groups, some changes were made to the structure of Policy Rule objects. Specifically, references to networks and services, previously ids (e.g. "abc123"
), are replaced with typed references (e.g. { "type": "networkGroup", "id": "abc123" }
). These changes affect payloads and results of the following methods.
Methods |
---|
getPolicies / getRuleTemplates |
createPolicy / createRuleTemplate |
addRuleToPolicy / addRuletoTemplate |
modifyPolicyRule / modifyTemplateRule |
updatePolicyRules / updateTemplateRules |
Automation Engine (app-workflow_engine)
IAP 2020.1.0 includes the release of an improved Automation Engine. Incomplete tasks are no longer inserted into the tasks collection. As a result, the returned payload of the following methods are affected (e.g. incomplete tasks are not returned with these calls).
Methods |
---|
searchTasks |
queryTasksBrief |
getTask |
queryTasks |
getTaskIterations |
getJobFromTaskQuery |
getAssociatedJobs |
The inputs for getManualTaskController
have changed to include both the task id
and the job id
, instead of just the id of the task document.
To account for this change, please update any custom code and any automations using these APIs.
For getAssociatedJobs
, the response now includes the task data available within a job document with a modified owner property (that is the same as previous releases). The biggest change is that tasks returned using this call no longer have _id
, but instead have taskId
and an array of iteration ids that are similar to the previous _id
. See the comparison below.
2019.3 Data
"owner": {
"_id": "5e1ca0b7ede734677b0a37b7",
"provenance": "Local AAA",
"username": "admin@pronghorn",
"firstname": "admin",
"memberOf": [],
"assignedRoles": []
"_meta": {},
"email": ""
},
"_id": "53504ab0-ecc2-469a-91d4-bf12d702c5c3",
2020.1 Data
"taskId": "25ec",
"owner": {
"_id": "5e1ca0b7ede734677b0a37b7",
"provenance": "Local AAA",
"username": "admin@pronghorn",
"firstname": "admin",
"memberOf": [],
"assignedRoles": []
"_meta": {},
"email": ""
},
"iterations": [
"53504ab0-ecc2-469a-91d4-bf12d702c5c3"
],
Task Worker (app-task_worker) Properties Moved to Automation Engine
Task Worker is now part of app-workflow_engine. As a result, the activate
and TICK
properties (found within the Task Worker Service Properties UI) are no longer used by any app. Since the TICK
property will no longer be used, there will be no effect on the system. If the activate
property has been set in your current environment, please ensure it is now set within the WorkFlowEngine Service Properties UI. This replaces the app-task_worker activate
property and operates in the same way.
Itential Tools (itential_tools)
With each new release, NSO capabilities are becoming more enhanced and providing more features out of the box. Hence, some of the Itential Tools methods became redundant and obsolete. Below are the methods deprecated in 2019.2 and removed in the 2020.1 release.
Method | Replacement |
---|---|
createTemplate | NSO provides create_template out of the box. |
doCommand | Use either runCommand or runAction. |
native2XML | No replacement. |
getYANG | No replacement. |
Adapter NSO (adapter-nso)
Below are the adapter-nso
methods deprecated in 2019.2 and removed in the 2020.1 release.
Method | Replacement |
---|---|
getConfig | Use "CISCO_AR_FORMAT" instead of "NATIVE" as the format input parameter. |
getSchema | getServiceModel |
getYANG | getServiceModel |
loadXML | NSO Manager:runAction |
passThru | runCommand |
loadNativeConfig | NSO Manager:runAction |
createGroup | saveGroup |
getReports | No replacement. |
createReport | No replacement. |
deleteReport | No replacement. |
runCompliance | No replacement. |
getServiceDeviceList | getDevicesFiltered |
listServiceModels | getServiceModelMap |
getDeviceModificationsForServiceInstance | getDeviceModificationsForServiceInstanceWithParams |
deleteService | deleteServiceWithOptions |
deleteServicePoint | No replacement. |
prepareServiceData | No replacement. |
addServiceInstance | saveServiceInstances |
addServiceInstanceWithOptions | saveServiceInstances |
addServiceInstanceFromObject | saveServiceInstances |
DryRunService | testServiceInstances |
dryRunServiceInstance | testServiceInstances |
dryRunServiceInstanceObject | testServiceInstances |
getServiceInstanceObjectTemplate | getServiceModel |
testServiceInstance | testServiceInstances |
saveServiceInstanceObject | saveServiceInstances |
saveServiceInstance | saveServiceInstances |
convertObjectToArray | No replacement. |
getServiceModelFields | getServiceModel |
Smart Template (app-smart_template)
The following app-smart_template
method was deprecated in 2019.2 and removed in the 2020.1 release.
Method | Replacement |
---|---|
task/TemplateForm | task/SmartTemplateForm |